package abstractFactory

import "fmt"

// 午饭接口
type Lunch interface {
	Cook()
}

// 大米实现了午饭接口
type Rise struct {
}

func (r *Rise) Cook() {
	fmt.Println("蒸米饭")
}

// 西红柿实现 午饭
type Tomato struct {
}

func (t *Tomato) Cook() {
	fmt.Println("爆炒西红柿")
}

// 午饭工厂 可提供 午饭接口
type LunchFactory interface {
	CreateFood() Lunch
	CreateVegatable() Lunch
}

// 简单工厂实现了 午饭工厂的 所有的接口
type SimpleLunchFactory struct {
}

func (s *SimpleLunchFactory) CreateFood() Lunch {
	return &Rise{}
}
func (s *SimpleLunchFactory) CreateVegatable() Lunch {
	return &Tomato{}
}

// 简单工厂 可以生产 午饭工厂
func NewSimpleLunchFactory() LunchFactory {
	return &SimpleLunchFactory{}
}
